from enum import Enum
from typing import Literal


class AgentState(str, Enum):
    """Agent execution states"""

    IDLE = "IDLE"
    RUNNING = "RUNNING"
    FINISHED = "FINISHED"
    ERROR = "ERROR"


class ToolChoice(str, Enum):
    """Tool choice options"""

    NONE = "none"
    AUTO = "auto"
    REQUIRED = "required"


TOOL_CHOICE_VALUES = tuple(choice.value for choice in ToolChoice)
# 基于提取的值创建字面量类型
# 字面量类型是 Python 3.8+ 引入的一种类型注解，用于指定变量必须是枚举中定义的特定值。
# 字面量类型与枚举在做类型限制时的使用区别：变量可以直接是值，而不是枚举实例。
# “#type: ignore”在这个场景下是有用的，解决了类型检查器静态分析能力的限制，因为静态无法确定TOOL_CHOICE_VALUES是否是正确的元祖。
TOOL_CHOICE_TYPE = Literal[TOOL_CHOICE_VALUES]  # type: ignore


class LLMLocalName(str, Enum):
    """LLM Local names, 与config_*.ini中的组名对应"""

    LLM_DEEPSEEK = "llm_deepseek"
    LLM_ALIYUNCS = "llm_aliyuncs"
